package me.ctidy.assignment02;

import android.content.Intent;
import android.view.View;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 根据 id 寻找控件 (View), 并设置点击事件监听器
        findViewById(R.id.main_btn).setOnClickListener(this);
    }

    /**
     * 实现了 {@link View.OnClickListener} 接口, 组件点击事件的监听处理器
     * @param v 被点击的组件, 需要进行判断
     */
    @Override
    public void onClick(View v) {
        // 根据 id 判断组件, 为每个组件编写不同的点击响应
        switch (v.getId()) {
            // id 为 main_btn 的控件被点击了, 执行相应的响应处理
            case R.id.main_btn: onMainBtnClick(v);
        }
    }

    public void onMainBtnClick(View v) {
        // 显式 intent 跳转

        // 1. 依赖强注入 (构造方法注入依赖)
        Intent intent = new Intent(this, SecondActivity.class);
        // 2. 依赖弱注入 (setter注入依赖)
        //intent.setClass(this, SecondActivity.class);
        // 也可以使用 setClassName() 方法, 以字符串形式传递完整类名
        //intent.setClassName(this, "me.ctidy.assignment02");
        //intent.setClassName(this.getPackageName(), "me.ctidy.assignment02");

        // 本质:
        // 实例化 ComponentName 对象, 作为 Intent 类的属性
        // ComponentName 拥有许多构造方法重载, 因而衍生出 Intent 类的多种依赖注入方式
        // intent 通过 Component 直接设置需要调用的 Activity 类, 唯一且确定, 意图特别明确, 所以是“显式”的

        // 将编写好的 intent 传递给 startActivity() 方法, 尝试启动另一个 Activity
        // intent 担当着 数据包装类 的角色, 其属性反映了某一次的具体行为 (Action), 从而展现出某种意图, 故得起名
        startActivity(intent);
    }

}
